/**
author  wanhu
mail    wanhu88@gmail.comb

[method]
    getData 方法（自己实现，或提供url）
[method]
    setParam方法（getData时调用）
[method]
    render  方法
*/
var berserker = berserker || {};
/*
chart 默认配置
*/
var CHARTDEFAULT = {
    chart:{
        backgroundColor:'#f5f7fa'
    },
    //标题 对齐方式
    title:{
        align   :    'left',
        float   :   true,
        y   :   10,
        style   :   {
            fontSize    :   '14px'
        }
    },
    yAxis: {
            title: {
                text: ''
            }
        }
},
/*
    事件的统一处理函数(统一绑定click事件)
*/
CHARTDEFAULT_EVENTS={
    events:{

    },
    //线形
    column:{
        plotOptions :{
            column:{
                events:{
                    click:function(evt){
                        COLUMN_CHART_CLICNK_HANDLE.apply(this,[evt,this.chart.cfg])
                    }
                }
            }
        }
    },
    line:{
        plotOptions :{
            line:{
                point:{
                    events:{
                        click:function(evt){
                            //TODO line:name evt.currentTarget.name
                            //console.log('line.clumn.click');


                            LINE_CHART_CLICNK_HANDLE.apply(this,[evt,this.series.chart.cfg])
                        }
                    }
                }
            }
        }
    },
    //饼状图
    pie :{
        tooltip:{
            //enabled:false
        },
        plotOptions :{
            pie:{
                allowPointSelect: true,
                cursor: 'pointer',
                events:{
                    click:function(evt){
                        PIE_CHART_CLICNK_HANDLE.apply(this,[evt,this.chart.cfg])
                    }
                }
            }
        }
    }
};

function COLUMN_CHART_CLICNK_HANDLE(evt,cfg){

    showRight(cfg.url, {category :evt.point.category , value:evt.point.config, colum_index:evt.point.series.columnIndex})
}

function LINE_CHART_CLICNK_HANDLE(evt,cfg){

    showRight(cfg.url, {category :this.category , value:this.y})
}

function PIE_CHART_CLICNK_HANDLE(evt,cfg){

    showRight(cfg.url, {category :evt.point.name , value:evt.point.percentage})
}

(function(B){
    $.extend(B,{
        apiBase       :    '/ipad',
        //apiBase       :    '/tpfocus_client_v3/web',
        _viewBase   :     {
            //如果没有实现，则使用此方法
            /**
            @description    获得数据，可通过ajax访问，需提供call函数
            */
            _getData : function(callback){
                var that = this;
                showLoading();
                that._getData = that.getData || function(callback){
                    berserker.getJSON(B.apiBase + this.dataURL,this._getParam(),function(res){
                        //TODO 对数据进行处理
                        //console.log(res);
                        callback(res);
                        hideLoading();
                    })
                }
                that._getData.apply(that,arguments);
            },
            _beforeRender:function(){
                 var that = this;
                that._beforeRender = that.beforeRender || function(){return {}}
                return this._beforeRender.apply(that,arguments);
            },
            /**
            @descriotion    如果未实现，则默认使用此方法
            */
            _getParam : function(){
                var that = this;
                that._getParam = that.getParam || function(){return {}}
                return this._getParam.apply(that,arguments);
            },
            render : function(ele,data){
                if(this.coverRight){
                    $('#frm_right').hide()
                }else{
                    domRightTitle.fadeOut();
                    domRightLoading.hide();
                    domRightContent.fadeOut();

                    $('#frm_right').show()
                }
                if(!ele || (ele && ele.length === 0) ){
                    console.warn('lost argument "ele"!','ModelBase.render');
                    return;
                }
                if(typeof ele === 'string'){
                    ele = $(ele);
                }
                var that = this;
                /*if(this.tpl){*/
                //this.tpl = template(this.tpl,data);
                //this.reader = function(data,ele){
                if(data){
                    that._beforeRender(ele);
                    ele.html(template(that.tpl,data));
                    that.rendChart(ele,data);
                    that.done(ele,data);
                    $('#frm_center .tabview .tab').click(function(){
                        if(!$(this).hasClass('current')){
                            domRightContent.html('')
                        }
                    })
                    $(".tabview > ul",ele).tabs(".tabview > .tabContent");

                }else{
                    that._getData(function(res){
                        that._beforeRender(ele);
                        ele.html(template(that.tpl,res.data));
                        that.rendChart(ele,res.data);
                        that.done(ele,res.data);
                        $('#frm_center .tabview .tab').click(function(){
                            if(!$(this).hasClass('current')){
                                domRightContent.html('')
                            }
                        })
                        $(".tabview > ul",ele).tabs(".tabview > .tabContent");
                    })
                }
     /*           }
              }else{
                   this.reader = function(data,ele){
                        ele.html(template.render(this.tpname, data));
                        this.rendChart(ele);
                        this.done(ele,data);

                    }

                }
                this.reader.apply(this,arguments);
    */        },
            //绘制chart
            rendChart : function(host,data){
                var charts = $('[data-chart]',host);
                    //host = $(host);
                charts.each(function(index,item){
                     //series:[{name: '医院A',data: [7.0, 6.9, 9.5, 14.5, 18.4]}, {name: '医院B',data: [3.9, 4.2, 5.7, 8.5, 11.9],color:'#ccc',dashStyle: 'shortdot'}]
                    item  = $(item);
                    var key = item.attr('data-chart'),
                        chtitem = (data['chart'] || {})[key];
                    if(chtitem){
                        var opt = $.extend(true,{},
                        CHARTDEFAULT,
                        chart_config[chtitem['config']['chart']['type']],
                        CHARTDEFAULT_EVENTS[chtitem['config']['chart']['type']],
                        //原配置
                        $.parseJSON(item.attr('data-config')),
                        //接口数据
                        chtitem.config,
                        host.data('chartEvent') && host.data('chartEvent')[key],
                        //渲染对象
                        {chart:{renderTo:item[0]}}),
                        chart = null;
                        chart = new Highcharts.Chart(opt);
                        chart.cfg = chtitem.info;
                        item.data('chart', chart);
                    }else{
                        //debugger
                    }
                })
            }
        }
    })

    $.extend(B,{
        getView : function(name){
            if(this._viewList[name]){
                return this._viewList[name];
            }
            B.warn('view "' + name+'" is lost!','getView')
            return {render:function(){}}
        },
        /**
        @param  id          {stirng}    模板ID，script的id或制定的唯一标识
        @param  [code]      {string}    不是script模板时，需要提供字符串
        @param  [callback]  {function}   编译完成后绑定模板函数
        */
        addView:function(config){
            var that = this,
                m = $.extend({},that._viewBase,config);
                //TOOD 实现控制器，导航等，目前放在complate
                //ctl = m.control;
            if(!m.done){
                m.done = B.emptyfun();
            }
            that._viewList[m.name] = m;
        }
    })
})(berserker)
